A REYES image rendering architecture is a system for computing computer animated video or images. The details of an exemplary REYES image rendering architecture are described in detail by Robert L. Cook, et al. in “The Reyes Image Rendering Architecture”, Computer Graphics, vol. 21, no. 4, July 1987, which is incorporated herein by reference. When processed in conjunction with a REYES image rendering architecture compatible renderer (a “REYES renderer”), primitives represent objects that may be included in the computer animated video or images. These primitives are typically diced into polygonal meshes prior to being shaded and projected onto an image plane. After projecting the polygonal meshes onto the image plane, visible polygons are identified. More specifically, the polygons closest to defined elements of the image plane are identified. These elements may comprise infinitesimal points, lines, or areas on the image plane. Color values computed for vertices of the visible polygons are then used to compute color values for the image plane.
To ensure that a sufficient amount of primitive detail is included in the computer animated video or images, each polygon in the polygonal meshes is approximately equal in size to a pixel (e.g., the smallest distinct area of the image plane). Computer animated video or images are represented by an array of numbers. In the case of a two-dimensional image, the array of numbers is a two-dimensional array and each number in the array corresponds to a tiny portion of the image. Each element in the array is referred to as a picture element (or pixel); and the pixel ordinarily has the same location in the array as the portion of the image it represents. In the case of a gray scale image, the numerical value of each pixel represents the relative brightness (or intensity) of the portion of the image to which it corresponds. In the case of a color image, the numerical value of each pixel is a set of numbers (or a vector) representing the color of the portion of the image to which it corresponds. Several different systems are available for numerical representation of colors.
The amount of dicing applied to a primitive is, therefore, dependent upon the size of the primitive relative to a pixel. If the primitive is much larger, for example, a large amount of dicing may be required. Similarly, if the primitive is close in size to the pixel, a relatively small amount of dicing may be required.
Additionally, polygonal meshes produced by a REYES renderer are processed separately so that the REYES renderer need not maintain all of the polygonal meshes in memory or access more than just a subset of the polygonal meshes at any one time. Because of this aspect of a REYES renderer, color values computed for vertices do not typically incorporate global illumination. Persons skilled in the art recognize that global illumination includes accounting for the effects of other primitives in an object scene on a vertex being shaded (e.g., accounting for light reflected off of another primitive onto the vertex being shaded). Instead, a REYES renderer typically shades the vertices with texture maps and other non-global illumination techniques.
Prior art renderers that incorporate ray-tracing (“ray tracing renderers”) trace a first set of rays (e.g., “visibility rays”) from an imaginary camera or viewer's eye through a position (e.g., a pixel) on the image plane into an object scene. The positions at which the rays intersect the object scene are visible from the image plane. More specifically, a position intersected by a visibility ray is visible from the position on the image plane through which the ray is cast.
Shading the positions at which the rays intersect the object scene typically includes casting a set of rays (e.g., shading rays) from each of the intersection positions. Some or all of the shading rays may intersect other objects in the object scene. Color values computed at positions intersected by shading rays are then used to compute color values for the positions intersected by visibility rays. Ray tracing renderers, therefore, use global illumination to compute color values.
Ray tracing renderers may also dice primitives into polygonal meshes. But polygons included in such polygonal meshes may not include polygons approximately equal in size to a pixel. Instead, the size of the polygons is dependant upon, for example, the curvature of the object modeled by a corresponding primitive. Often times, therefore, polygonal meshes diced from a given primitive for a ray tracing renderer are much less complex than polygonal meshes diced from the same primitive by a REYES renderer. As the complexity of a polygonal mesh decreases, so does the amount of processing time required to determine whether a ray intersects the polygonal mesh.
In both REYES renderers and ray tracing renderers, an object scene is rendered by distributing samples of the object scene in space and time. More specifically, samples are distributed spatially across the image plane. To avoid noticeable image artifacts (e.g., spatial aliasing), the spatial distribution of the samples is typically pseudo or quasi random. Additionally, some REYES renderers and ray tracing renderers split the areas of the image plane that correspond to pixels into non-overlapping sub-pixels. A sample is then distributed within each of these sub-pixels to avoid sample clustering.
Additionally, when film is exposed to an object scene while taking a picture or shooting film, a certain amount of time is required to open and close a shutter that regulates the film's exposure. Because of this amount of time, objects that move while the shutter is open and exposing the film may blur the image captured by the film. This type of blur is known as motion blur, and is a characteristic of pictures and film alike so it is desirable to simulate motion blur in computer animated video or images.
To simulate motion blur, samples distributed across an image plane are also distributed in time that corresponds to an object scene or image frame (e.g., the amount of time the shutter of an imaginary camera stays open). But more samples are required to render an object scene with moving objects, and adequately simulate motion blur, than to render an object scene without moving objects. If enough samples are not used, image artifacts (e.g., temporal aliasing) may be included in generated computer animated video or images. A prior art renderer that uses, for example, sixteen samples per pixel to sample object scenes without moving objects may use thirty-six or more samples per pixel to sample object scenes with moving objects, and adequately simulate motion blur.
But in prior art systems, the decision to allocate additional samples to each pixel to simulate motion blur is made on a scene-by-scene basis in advance of actually rendering an object scene. For example, a person operating the renderer determines that a given object scene or sequence of object scenes warrants additional samples to adequately simulate motion blur. But if additional samples are allocated to one pixel, additional samples are allocated to all pixels. Similarly, these prior art systems lack a mechanism for discriminating between individual pixels that should simulate motion blur (e.g., pixels that overlap moving objects) and those that should not. An exemplary system and method of simulating motion blur inefficiently is described in the United States patent bearing Ser. No. 4,897,806 and entitled “Pseudo-random point sampling techniques in computer graphics”.
As a result of the limitations of the prior art, pixels that do not actually overlap moving objects may, nevertheless, be allocated additional samples to simulate motion blur. These additional samples needlessly increase the amount of time and/or processing power required to render an object scene and increase the amount of memory required to store information gathered by these additional samples while the object scene is being rendered.
Because of the inefficiencies of the prior art, a system and method for simulating motion blur efficiently is needed.